//整数集合
#include <iostream>
#include <cstring>

using namespace std;
const int MAXN=1000;
const int MOD=3*MAXN*MAXN;
const long long INF=1000000000;
int n;
long long a[MAXN+1];

struct Sum2{
    long long s;
    int a,b;
};
struct HashTable{

    Sum2 data[MOD+1];
    int data_len=0;
    int index[MOD+1];
    void init(){
        memset(data,0,sizeof(data));
        data_len=0;
        memset(index,0,sizeof(index));
    }
    void store(long long s,int a,int b){//存入两个加数的和s,两个加数的下标是a,b
        data[++data_len]={s,a,b};
        int key=s % MOD;
        if (key<0) key=-1*key;
        while(index[key]>0&&index[key]!=data_len){
            key++;
            key=key % MOD;
        }
        index[key]=data_len;
    }

    bool find(long long s, int i,int j){//查找和为s,下标不等于i且不等于j的两个加数和，找到满足要求的第一个就行
        int key=s % MOD;
        if (key<0) key=-1*key;
        while(index[key]>0){
            Sum2 temp=data[index[key]];
            if (temp.s==s&&temp.a!=i&&temp.a!=j&&temp.b!=i&&temp.b!=j) return true;
            key++;
            key=key % MOD;
        }
        return false;
    }

};

HashTable h1;

int main(){
    cin>>n;
    while(n>0){
        h1.init();
        for(int i=1;i<=n;i++) cin>>a[i];
            
        long long maxd=-1*INF;

        for(int i=2;i<=n;i++){
            for(int j=1;j<i;j++) {
                long long t=a[i]+a[j];
                h1.store(t,i,j);
            }
        }
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                if (i!=j){
                    long long t=a[i]-a[j];
                    if (h1.find(t,i,j)&&maxd<t+a[j]) maxd=t+a[j];
                }
        if (maxd>-1*INF) cout<<maxd<<endl;
        else cout<<"No Solution"<<endl;
        cin>>n;
    }
}